home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2b.lha / p4-1.2b / contrib / lm1_slave.c < prev    next >
C/C++ Source or Header  |  1992-10-19  |  2KB  |  82 lines

  1. #include "p4.h"
  2. #include "lm.h"
  3.     
  4. slave()    
  5. {
  6.     int myid;
  7.     char buf[100];
  8.     int size;
  9.     int i,j,k,n;
  10.     int nslaves;
  11.     int start, end;
  12.     char *msg;
  13.     char loc_msg[200];
  14.     int type;
  15.     int done;
  16.     int from;
  17.     int nbunches,bunchsize;
  18.     int value;
  19.     int msg_cnt;
  20.     int msgs_rcvd[P4_MAXPROCS];  /* cheated and used a p4 internal def */
  21.     
  22.     myid = p4_get_my_id();
  23.     nslaves = p4_num_total_ids() - 1;
  24.     p4_get_cluster_ids(&start, &end);
  25.     /***
  26.       p4_dprintf("Inside slave process %d: nslaves=%d start=%d end=%d\n",
  27.       myid, nslaves, start, end);
  28.       ***/
  29.     
  30.     for (i=0; i < P4_MAXPROCS; i++)
  31.     msgs_rcvd[i] = 0;
  32.     
  33.     p4_dprintfl(9,"receiving...\n");
  34.     type = CNTL;
  35.     from = 0;
  36.     msg = NULL;
  37.     p4_recv(&type, &from, &msg, &size);
  38.     p4_dprintfl(9,"rcvd from=%d type=%d msg=%s\n",from,type,msg);
  39.     sscanf(msg,"%d %d",&nbunches,&bunchsize);
  40.     p4_msg_free(msg);
  41.     msgs_rcvd[from]++;
  42.     
  43.     type = DATA;
  44.     for (j=0; j < nbunches; j++)
  45.     {
  46.     for (i=1; i <= nslaves; i++)
  47.     {
  48.         for (k=0; k < bunchsize; k++)
  49.         {
  50.         if (i != myid)
  51.         {
  52.             sprintf(loc_msg,"%d",j);
  53.             p4_dprintfl(9,"sending %d %d to %d \n",j,k,i);
  54.             p4_send(DATA, i, loc_msg, sizeof(loc_msg));
  55.         }
  56.         }
  57.     }
  58.     }
  59.  
  60.     done = bunchsize * nbunches * (nslaves - 1);
  61.     msg_cnt = 0;
  62.     while (msg_cnt < done)
  63.     {
  64.     /**  p4_dprintfl(0,"receiving \n");  **/
  65.     type = DATA;
  66.     from = -1;
  67.     msg = NULL;
  68.     p4_recv(&type, &from, &msg, &size);
  69.     value = atoi(msg);
  70.     msg_cnt++;
  71.     p4_msg_free(msg);
  72.     msgs_rcvd[from]++;
  73.     p4_dprintfl(9,"rcvd from=%d type=%d value=%d\n",from,type,value);
  74.     }
  75.     p4_send(DATA, 0, loc_msg, sizeof(loc_msg));
  76.     p4_dprintf("rcvd from: %d %d %d %d %d %d %d %d \n",
  77.         msgs_rcvd[0], msgs_rcvd[1], msgs_rcvd[2], msgs_rcvd[3],
  78.         msgs_rcvd[4], msgs_rcvd[5], msgs_rcvd[6], msgs_rcvd[7]);
  79.     
  80.     p4_dprintfl(0,"%d exiting\n", p4_get_my_id());
  81. }
  82.